//app.js

// 环境配置
const ENV = require('./env.js')

App({
  onLaunch: function () {
    
    // 展示本地存储能力
    var logs = wx.getStorageSync('logs') || []
    logs.unshift(Date.now())
    wx.setStorageSync('logs', logs)

    // 登录
    wx.login({
      success: res => {
        // 发送 res.code 到后台换取 openId, sessionKey, unionId
        console.log(res)
       
      }
    })
    // 获取用户信息
    wx.getSetting({
      success: res => {
        if (res.authSetting['scope.userInfo']) {
          // 已经授权，可以直接调用 getUserInfo 获取头像昵称，不会弹框
          this.globals.authorised = true

          wx.getUserInfo({
            success: res => {
              // 可以将 res 发送给后台解码出 unionId
              this.globals.userInfo = res.userInfo
          
              // 由于 getUserInfo 是网络请求，可能会在 Page.onLoad 之后才返回
              // 所以此处加入 callback 以防止这种情况
              // 向每个面页分发用户信息准备好 事件
              var pages =  this.globals.pages
              for(var k in pages){
                if (pages[k].onUserInfoReady) {
                  pages[k].onUserInfoReady()
                }
              }
              
            }
            
          })
        }
      }
    })
  },

  globals: {
    host: ENV.ENV_CONFIG.HTTP_PROTOCOL + ENV.ENV_CONFIG.HOST,
    websocketHost: ENV.ENV_CONFIG.WS_PROTOCOL + ENV.ENV_CONFIG.HOST,
    authorised: false,
    userInfo: null,
    pages:{},
    websocket:null,
  },

  /**
   * 正在连接websocket
   */
  isConnectingSocket: false,
  /**
   * 初始化websocket连接
   * @returns Obj WebsocketTask
   */
  initWebsocket:function(){
    var self = this
    var globals = this.globals
    if(this.isConnectingSocket){
      return null
    }
    if(globals.websocket && globals.websocket != null){
      return globals.websocket
    }
    
    // 奖励websocket
    //console.log(globals.websocketHost +  'websocket')
    self.isConnectingSocket = true
    var task = wx.connectSocket({
      url: globals.websocketHost +  'websocket',
      header:{
        "content-type": "application/x-www-form-urlencoded;charset=utf-8"
      },
      success:function(res){
        console.log("连接成功")
        console.log(res)
      },
      fail:function(res){
        console.log("连接失败")
        console.log(res)
      },
      complete:function(){
        self.isConnectingSocket = false
      }
    })
    task.onOpen(function(header){
      console.log('打开成功')
      console.log(header)
      globals.websocket = task
    })
    task.onClose(function(res){
      console.log('连接关闭')
      console.log(res)
      globals.websocket = null;
      // 重连
      setTimeout(self.initWebsocket, 5000)
    })

    task.onError(function (res){
      console.log('连接出错')
      console.log(res)
    })

    task.onMessage(function(res){
      console.log('接受到消息')
      console.log(res)
      var data = null
      try {
        data = JSON.parse(res.data)
      } catch (error) {
        console.log('转化json对象失败')
        console.log(error)
        return
      }
      // if(typeof(data)!='object'){
      //   return
      // }
      
      
      // 解析数据目标
      if(!data.target){
        // 没有数据目标
        return
      }
      console.log(data)
      switch(data.target){
        case 'device':
          if(data.device){
            // 调用面页回调函数
            if(globals.pages['index'] && globals.pages['index'].onSocketMessage){
              globals.pages['index'].onSocketMessage(data.device)
            }
          }
          break
        case 'session':
          if(data.deviceId && data.detail){
            // 调用面页回调函数
            if(globals.pages['session'] && globals.pages['session'].onSocketMessage){
              globals.pages['session'].onSocketMessage({
                "deviceId": data.deviceId,
                "detail": data.detail
              })
            }
          }
          break
        default:
          break
      }
    })
  }

})